﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Obligatorio1;
using Obligatorio1.Modelo;

namespace Agenda
{
    public partial class frmGrupo : Form
    {

        private frmGrupo(Grupo _grupo, Modo _modo)
        {
            InitializeComponent();
            this.grupo = _grupo;
            this.modoActual = _modo;


        }
        #region"Properties"
        private static frmGrupo instance = null;
        private Grupo grupo;
        private Modo modoActual;
        #endregion
        public static frmGrupo getInstance(Grupo _grupo, Modo _modo)
        {
            if (instance == null)
            {
                instance = new frmGrupo(_grupo, _modo);
            }
            else
            {
                instance.grupo = _grupo;
                instance.modoActual = _modo;
            }
            return instance;
        }
        #region "Enums"
        public enum Modo
        {
            Nuevo = 0,
            Lectura = 1
        }
        #endregion

        public void CargarGrupo()
        {
            switch (modoActual)
            {
                case Modo.Nuevo:
                    cargarNuevo();
                    break;
                case Modo.Lectura:
                    cargarGrilla();
                    break;
            }
            this.Show();
        }

        private void crearMEnu()
        {
            ContextMenuStrip mnu = new ContextMenuStrip();
            ToolStripMenuItem mnuEli = new ToolStripMenuItem("Eliminar");
            //Assign event handlers
            mnuEli.Click += new EventHandler(mnuCopy_Click);
            //Add to main context menu
            mnu.Items.AddRange(new ToolStripItem[] { mnuEli });
            //Assign to datagridview
            gvPersonas.ContextMenuStrip = mnu;
        }

        private void mnuCopy_Click(object sender, EventArgs e)
        {
            try
            {
                Persona persona = gvPersonas.Rows[gvPersonas.CurrentCell.RowIndex].DataBoundItem as Persona;
                ManejadorGrupo.getInstance().borrarPersonaGrupo(grupo, persona);
                cargarGrilla();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Ocurrió el siguiente error:  " + exc.Message, "Error");
            }
        }

        private void cargarGrilla()
        {
            this.txtNombreGrupo.Text = grupo.nombre;
            this.gvPersonas.DataSource = this.grupo.Persona.ToList();
            this.gvPersonas.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            this.txtNombreGrupo.ReadOnly = true;

            if (gvPersonas.Columns.Count > 0)
            {
                //Acomodamos la grilla personas
                gvPersonas.Columns[3].Visible = false;
                gvPersonas.Columns[6].Visible = false;
                gvPersonas.Columns[7].Visible = false;
                gvPersonas.Columns[8].Visible = false;
                gvPersonas.Columns[9].Visible = false;
            }
        }

        private void cargarNuevo()
        {
            this.gvPersonas.DataSource = null;
            this.txtNombreGrupo.Text = "";
            this.txtNombreGrupo.ReadOnly = false;
        }

        private void frmGrupo_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                e.Cancel = true;
                this.Hide();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Ocurrió el siguiente error:  " + exc.Message, "Error");
            }
        }

        private void btnConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                if (modoActual == Modo.Nuevo)
                {
                    if (!txtNombreGrupo.Text.Equals(""))
                    {
                        Grupo g = new Grupo();
                        g.nombre = txtNombreGrupo.Text;
                        if (!ManejadorGrupo.getInstance().Contiene(g.nombre))
                        {
                            ManejadorGrupo.getInstance().agergarGrupo(g);
                            frmAgenda.getInstance().CargarGruposEnGrilla();
                            this.Hide();
                        }
                        else
                        {
                            MessageBox.Show("El grupo ya existe", "Mensaje de advertencia");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Debe ingresar un nombre para el grupo", "Mensaje de advertencia");
                    }
                }
                else
                {
                    frmAgenda.getInstance().CargarGruposEnGrilla();
                    this.Hide();
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show("Ocurrió el siguiente error:  " + exc.Message, "Error");
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                if (grupo != null)
                {
                    ManejadorGrupo.getInstance().borrarGrupo(grupo);
                }
                frmAgenda.getInstance().CargarGruposEnGrilla();
                this.Hide();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Ocurrió el siguiente error:  " + exc.Message, "Error");
            }
        }

        private void frmGrupo_Load(object sender, EventArgs e)
        {
            try
            {
                crearMEnu();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Ocurrió el siguiente error:  " + exc.Message, "Error");
            }
        }
    }
}
